package tech.edwardvan.designpattern.pattern.creational.simplefactory;

import lombok.extern.slf4j.Slf4j;

/**
 * 简单工厂模式
 *
 * @author EdwardVan
 */
@Slf4j
public class SimpleFactoryDemo2 {
    public static void main(String[] args) {
        //对象的创建和使用解耦
        GPU gpu = GPUFactory.produce(GPUType.MSI);
        gpu.output();
    }

    /**
     * GPU工厂
     * 如果想拓展类型,只能添加if...else...
     * 创建不同类型对象的方法耦合
     */
    private static class GPUFactory {

        public static GPU produce(GPUType type) {
            if (type.equals(GPUType.MSI)) {
                //复杂的创建过程
                return new MsiGPU();
            } else if (type.equals(GPUType.COLORFUL)) {
                //复杂的创建过程
                return new ColorfulGPU();
            } else {
                return null;
            }
        }
    }

    private enum GPUType {
        MSI, COLORFUL
    }

    private interface GPU {
        void output();
    }

    private static class MsiGPU implements GPU {

        @Override
        public void output() {
            log.info("微星显卡输出");
        }
    }

    private static class ColorfulGPU implements GPU {

        @Override
        public void output() {
            log.info("七彩虹显卡输出");
        }
    }

}
